home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 March / EnigmA AMIGA RUN 05 (1996)(G.R. Edizioni)(IT)[!][issue 1996-03][Skylink CD IV].iso / earcd / assembler / progasm1.lha / SORGENTI2 / LEZIONE6f.s < prev    next >
Text File  |  1994-07-28  |  8KB  |  230 lines

  1.  
  2. ; Lezione6f.s        SCRITTURA "SOPRA" UNA FIGURA
  3.  
  4.     SECTION    CiriCop,CODE
  5.  
  6. Inizio:
  7.     move.l    4.w,a6        ; Execbase in a6
  8.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  9.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  10.     jsr    -$198(a6)    ; OpenLibrary
  11.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  12.     move.l    d0,a6
  13.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist vecchia
  14.  
  15. ;    Puntiamo i bitplanes in copperlist - prima la PIC
  16.  
  17.     MOVE.L    #PIC,d0        ; in d0 mettiamo l'indirizzo della PIC, in
  18.                 ; questo caso puntiamo piu' avanti di 50
  19.                 ; linee in modo da far "SALIRE" l'immagine.
  20.     LEA    BPLPOINTERS,A1    ; puntatori nella COPPERLIST
  21.     MOVEQ    #2,D1        ; numero di bitplanes -1 (qua sono 3)
  22. POINTBP:
  23.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  24.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  25.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  26.     swap    d0        ; scambia le 2 word di d0 (es: 3412 > 1234)
  27.     ADD.L    #40*256,d0    ; + lunghezza bitplane -> prossimo bitplane
  28.     addq.w    #8,a1        ; andiamo ai prossimi bplpointers nella COP
  29.     dbra    d1,POINTBP    ; Rifai D1 volte POINTBP (D1=num of bitplanes)
  30.  
  31. ;     PUNTIAMO IL NOSTRO BITPLANE
  32.  
  33.     MOVE.L    #BITPLANE,d0    ; in d0 mettiamo l'indirizzo della PIC,
  34.     LEA    BPLPOINTERS2,A1    ; puntatori nella COPPERLIST (plane 4!)
  35.     move.w    d0,6(a1)    ; copia la word BASSA dell'indirizzo del plane
  36.     swap    d0        ; scambia le 2 word di d0 (es: 1234 > 3412)
  37.     move.w    d0,2(a1)    ; copia la word ALTA dell'indirizzo del plane
  38.  
  39.     move.l    #COPPERLIST,$dff080    ; Puntiamo la nostra COP
  40.     move.w    d0,$dff088        ; Facciamo partire la COP
  41.     move.w    #0,$dff1fc        ; Disattiva l'AGA
  42.     move.w    #$c00,$dff106        ; Disattiva l'AGA
  43.  
  44.     bsr.w    print        ; Stampa le linee di testo sullo schermo
  45.                 ; in HIRES
  46. mouse:
  47.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  48.     bne.s    mouse        ; se no, torna a mouse:
  49.  
  50.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  51.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  52.  
  53.     move.l    4.w,a6
  54.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  55.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  56.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  57.     rts            ; USCITA DAL PROGRAMMA
  58.  
  59. ;    Dati
  60.  
  61. GfxName:
  62.     dc.b    "graphics.library",0,0
  63.  
  64. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  65.     dc.l    0    ; della graphics.library
  66.  
  67. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  68.     dc.l    0
  69.  
  70. ;    Routine che stampa caratteri larghi 8x8 pixel (su schermo LOWRES)
  71.  
  72. PRINT:
  73.     LEA    TESTO(PC),A0    ; Indirizzo del testo da stampare in a0
  74.     LEA    BITPLANE,A3    ; Indirizzo del bitplane destinazione in a3
  75.     MOVEQ    #23-1,D3    ; NUMERO RIGHE DA STAMPARE: 23
  76. PRINTRIGA:
  77.     MOVEQ    #40-1,D0    ; NUMERO COLONNE PER RIGA: 40 (lores)
  78. PRINTCHAR2:
  79.     MOVEQ    #0,D2        ; Pulisci d2
  80.     MOVE.B    (A0)+,D2    ; Prossimo carattere in d2
  81.     SUB.B    #$20,D2        ; TOGLI 32 AL VALORE ASCII DEL CARATTERE, IN
  82.                 ; MODO DA TRASFORMARE, AD ESEMPIO, QUELLO
  83.                 ; DELLO SPAZIO (che e' $20), in $00, quello
  84.                 ; DELL'ASTERISCO ($21), in $01...
  85.     MULU.W    #8,D2        ; MOLTIPLICA PER 8 IL NUMERO PRECEDENTE,
  86.                 ; essendo i caratteri alti 8 pixel
  87.     MOVE.L    D2,A2
  88.     ADD.L    #FONT,A2    ; TROVA IL CARATTERE DESIDERATO NEL FONT...
  89.  
  90.                 ; STAMPIAMO IL CARATTERE LINEA PER LINEA
  91.     MOVE.B    (A2)+,(A3)    ; stampa LA LINEA 1 del carattere
  92.     MOVE.B    (A2)+,40(A3)    ; stampa LA LINEA 2  " "
  93.     MOVE.B    (A2)+,40*2(A3)    ; stampa LA LINEA 3  " "
  94.     MOVE.B    (A2)+,40*3(A3)    ; stampa LA LINEA 4  " "
  95.     MOVE.B    (A2)+,40*4(A3)    ; stampa LA LINEA 5  " "
  96.     MOVE.B    (A2)+,40*5(A3)    ; stampa LA LINEA 6  " "
  97.     MOVE.B    (A2)+,40*6(A3)    ; stampa LA LINEA 7  " "
  98.     MOVE.B    (A2)+,40*7(A3)    ; stampa LA LINEA 8  " "
  99.  
  100.     ADDQ.w    #1,A3        ; A1+1, avanziamo di 8 bit (PROSSIMO CARATTERE)
  101.  
  102.     DBRA    D0,PRINTCHAR2    ; STAMPIAMO D0 (40) CARATTERI PER RIGA
  103.  
  104.     ADD.W    #40*7,A3    ; ANDIAMO A CAPO
  105.  
  106.     DBRA    D3,PRINTRIGA    ; FACCIAMO D3 RIGHE
  107.  
  108.     RTS
  109.  
  110.  
  111.         ; numero caratteri per linea: 40
  112. TESTO:         ;          1111111111222222222233333333334
  113.          ;     1234567890123456789012345678901234567890
  114.     dc.b    '                                        ' ; 1
  115.     dc.b    '                SECONDA RIGA            ' ; 2
  116.     dc.b    '     /\  /                              ' ; 3
  117.     dc.b    '    /  \/                               ' ; 4
  118.     dc.b    '                                        ' ; 5
  119.     dc.b    '        SESTA RIGA                      ' ; 6
  120.     dc.b    '                                        ' ; 7
  121.     dc.b    '                                        ' ; 8
  122.     dc.b    'FABIO CIUCCI COMMUNICATION INTERNATIONAL' ; 9
  123.     dc.b    '                                        ' ; 10
  124.     dc.b    '   1234567890 !@#$%^&*()_+|\=-[]{}      ' ; 11
  125.     dc.b    '                                        ' ; 12
  126.     dc.b    ' -=- LA PALINGENETICA OBLITERAZIONE -=- ' ; 13
  127.     dc.b    " ##  DELL'IO TRASCENDENTALE CHE SI  ##  " ; 14
  128.     dc.b    ' ///    IMMEDESIMA E SI INFUTURA   \\\  ' ; 15
  129.     dc.b    '  Nel mezzo del cammin di nostra vita   ' ; 16
  130.     dc.b    '                                        ' ; 17
  131.     dc.b    '    Mi RitRoVaI pEr UnA sELva oScuRa    ' ; 18
  132.     dc.b    '                                        ' ; 19
  133.     dc.b    '    CHE LA DIRITTA VIA ERA SMARRITA     ' ; 20
  134.     dc.b    '                                        ' ; 21
  135.     dc.b    '  AHI Quanto a DIR QUAL ERA...          ' ; 22
  136.     dc.b    '                                        ' ; 23
  137.     dc.b    '                                        ' ; 24
  138.     dc.b    '                                        ' ; 25
  139.     dc.b    '                                        ' ; 26
  140.  
  141.     EVEN
  142.  
  143.  
  144.  
  145.     SECTION    GRAPHIC,DATA_C
  146.  
  147. COPPERLIST:
  148.     dc.w    $120,$0000,$122,$0000,$124,$0000,$126,$0000,$128,$0000 ; SPRITE
  149.     dc.w    $12a,$0000,$12c,$0000,$12e,$0000,$130,$0000,$132,$0000
  150.     dc.w    $134,$0000,$136,$0000,$138,$0000,$13a,$0000,$13c,$0000
  151.     dc.w    $13e,$0000
  152.  
  153.     dc.w    $8e,$2c81    ; DiwStrt    (registri con valori normali)
  154.     dc.w    $90,$2cc1    ; DiwStop
  155.     dc.w    $92,$0038    ; DdfStart
  156.     dc.w    $94,$00d0    ; DdfStop
  157.     dc.w    $102,0        ; BplCon1
  158.     dc.w    $104,0        ; BplCon2
  159.     dc.w    $108,0        ; Bpl1Mod
  160.     dc.w    $10a,0        ; Bpl2Mod
  161.  
  162.             ; 5432109876543210
  163.     dc.w    $100,%0100001000000000    ; bit 14 - 4 bitplanes, 16 colori
  164.  
  165. BPLPOINTERS:
  166.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  167.     dc.w $e4,$0000,$e6,$0000    ;secondo bitplane
  168.     dc.w $e8,$0000,$ea,$0000    ;terzo     bitplane
  169. BPLPOINTERS2:
  170.     dc.w $ec,$0000,$ee,$0000    ;quarto     bitplane
  171.  
  172.     dc.w    $180,$000    ; color0 ; colori della figura un po' attenuati
  173.     dc.w    $182,$354    ; color1
  174.     dc.w    $184,$678    ; color2
  175.     dc.w    $186,$567    ; color3
  176.     dc.w    $188,$455    ; color4
  177.     dc.w    $18a,$121    ; color5
  178.     dc.w    $18c,$455    ; color6
  179.     dc.w    $18e,$233    ; color7
  180.  
  181.     dc.w    $190,$d6e    ; color8    ; I colori della scritta:
  182.     dc.w    $192,$d6e    ; color9    ; infatti tutte le varie
  183.     dc.w    $194,$d6e    ; color10    ; sovrapposizioni formerebbero
  184.     dc.w    $196,$d6e    ; color11    ; altri 8 colori, che noi
  185.     dc.w    $198,$d6e    ; color12    ; definiamo tutti uguali
  186.     dc.w    $19a,$d6e    ; color13
  187.     dc.w    $19c,$d6e    ; color14
  188.     dc.w    $19e,$d6e    ; color15
  189.  
  190.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  191.  
  192. ;    Il FONT caratteri 8x8
  193.  
  194. FONT:
  195.     incbin    "metal.fnt"    ; Carattere largo
  196. ;    incbin    "normal.fnt"    ; Simile ai caratteri kickstart 1.3
  197. ;    incbin    "nice.fnt"    ; Carattere stretto
  198.  
  199. PIC:
  200.     incbin    "amiga.320*256*3"    ; qua carichiamo la figura in RAW,
  201.  
  202.     SECTION    MIOPLANE,BSS_C    ; in CHIP
  203.  
  204. BITPLANE:
  205.     ds.b    40*256    ; un bitplane lores 320x256
  206.  
  207.     end
  208.  
  209. In questo esempio abbiamo aggiunto il bitplane 4,su cui viene scritto il testo.
  210. Col quarto bitplane si passa da 8 colori a 16, dunque per mantenere la
  211. scrittura dello stesso colore in qualsiasi situazione di sovrapposizione con
  212. gli altri 3 bitplane, tutti i "nuovi" otto colori devono essere uguali al
  213. colore del testo.
  214. Se invece i nuovi 8 colori sono simili ai primi otto, ma piu' chiari, si puo'
  215. ottenere un'effetto di "TRASPARENZA", infatti ogni volta che il plane del testo
  216. si sovrappone agli altri 3, visualizza per ogni pixel dei caratteri un colore
  217. simile a quello della figura ma, appunto, piu' chiaro, e l'illusione della
  218. "TRASPARENZA" avviene automaticamente.
  219. Provate a sostituire la palette degli ultimi colori con questa:
  220.  
  221.     dc.w    $190,$454    ; color8    ; I colori della scritta:
  222.     dc.w    $192,$7a8    ; color9    ; in questo caso formiamo
  223.     dc.w    $194,$eef    ; color10    ; 8 diversi colori per le
  224.     dc.w    $196,$cde    ; color11    ; 8 possibilita' di
  225.     dc.w    $198,$aab    ; color12    ; sovrapposizione - se notate
  226.     dc.w    $19a,$786    ; color13    ; sono simili ai primi 8,
  227.     dc.w    $19c,$9aa    ; color14    ; ma molto piu' luminosi
  228.     dc.w    $19e,$789    ; color15    ; per creare la "TRASPARENZA"
  229.  
  230.